其他
王者峡谷"一呼百应",弹幕“666”,背后都离不开长连接,如何实现千万级高性能的长连接网关?
可靠性
水平扩展能力
依赖组件成熟度
接入层使用 OpenResty 实现,负责连接负载均衡和会话保持
长连接 Broker,部署在容器中,负责协议解析、认证与鉴权、会话、发布订阅等逻辑
Redis 存储,持久化会话数据
Kafka 消息队列,分发消息给 Broker 或业务方
负载均衡,保证各长连接 Broker 实例上连接数相对均衡
会话保持,单个客户端每次连接到同一个 Broker,用来提供消息传输可靠性保证
分布不够均匀,部分来源 IP 是大型局域网 NAT 出口,上面的连接数多,导致 Broker 上连接数不均衡
不能准确标识客户端,当移动客户端掉线切换网络就可能无法连接回刚才的 Broker 了
减少长连接 Broker 内部状态,让 Broker 可以无压力扩容
知乎内部已平台化,支持水平扩展
使用消息队列削峰,避免突发性的上行或下行消息压垮系统
业务系统中大量使用 Kafka 传输数据,降低与业务方对接成本
消息路由到 Kafka Topic,但不消费,适合数据上报的场景。
消息路由到 Kafka Topic,也被消费,普通的即时通讯场景。
直接从 Kafka Topic 消费并下发,用于纯下发消息的场景。
消息路由到一个 Topic,然后从另一个 Topic 消费,用于消息需要过滤或者预处理的场景。
来源:https://zhuanlan.zhihu.com/p/66807833
往期推荐
🔗
点击阅读原文,获得更多精彩内容